package com.tbit.uqbike.client.service;

import com.tbit.uqbike.client.pojo.RideLog;

import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;

/**
 * 骑行日志service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface RideLogService {

    /**
     * 添加
     *
     * @param rideLog
     */
    void insert(RideLog rideLog);

    /**
     * 更新
     *
     * @param rideLog
     */
    void update(RideLog rideLog);


    /**
     * 根据订单号更新
     *
     * @param rideLog
     */
    void updateByOrderNO(RideLog rideLog);

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    List<RideLog> getByUserId(Integer userId);

    /**
     * 查询总数
     *
     * @param params
     * @return
     */
    Integer queryCount(Integer userId);

    /**
     * 分页查询
     *
     * @param params
     * @return
     */
    List<RideLog> queryPage(Integer userId, Integer rowCount, Integer pageNO);

    /**
     * 获取未完成骑行
     *
     * @param userId
     * @return
     */
    RideLog getByUserIdNotFinish(Integer userId);

    /**
     * 根据订单号查询
     *
     * @param orderNO
     * @return
     */
    RideLog getByOrderNO(String orderNO);

    /**
     * 查询用户最后一个未支付订单
     *
     * @param userId
     * @return
     */
    RideLog findNOtPayByUserId(Integer userId);

    /**
     * 查询用户最后一个已结束但未支付订单
     */
    RideLog findFinishButNOtPayByUserId(Integer userId);

    /**
     * 更新停车时长
     *
     * @param userId
     * @param stopTime
     */
    void updateStopTime(Integer userId, Integer stopTime);

    /**
     * 更新停车时长
     *
     * @param orderNO
     * @param stopTime
     */
    void updateStopTimeByOrderNO(String orderNO, Integer stopTime);

    /**
     * 更新最后一单的支付时间
     *
     * @param userId
     * @param date
     */
    void updatePayTimeByUserIdAndOrderNO(Integer userId, Date date, String orderNO);

    /**
     * 查询用户最后一个订单
     *
     * @param userId
     * @return
     */
    RideLog findLastByUserId(Integer userId);

    /**
     * 可选择的更新
     *
     * @param rideLog
     */
    void updateByOrderNOSelective(RideLog rideLog);

    /**
     * 更新微信支付分骑行订单
     *
     * @param rideLog
     */
    void updateWxzff(RideLog rideLog);


    /**
     * 修改分区id
     *
     * @param rideLog
     */
    void editRegionId(RideLog rideLog);

    void addBatch(List<RideLog> list);

    /**
     * 获取今天骑行次数
     *
     * @param userId
     * @return
     */
    Integer getTodayNo(Integer userId, String startTime);

    /**
     * 查询用户已支付骑行订单的数量
     * @param userId 用户id
     * @param days -1 代表 不限时间
     * @return 命中条数
     */
    Integer getRideCount(Integer userId,Integer days);

    /**
     * 根据用户id查询用户最后一次订单
     *
     * @param userId    用户id
     * @return RideLog
     */
    RideLog getLastByUserId(Integer userId);

}  